﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebShopAPI.Models;
using Models;
using DAL;
namespace WebShopAPI.Controllers
{
    public class ordersController : ApiController
    {
        sp_orderServcie sp_OrderServcie=new sp_orderServcie();

        #region 1.10.1 订单数据列表
        /// <summary>
        /// 构建一个对象作为查询的数据,本示例完成多条件查询
        /// get 请求，用对象接收，需要加上[FromUri]说明
        /// </summary>
        /// <param name="pars"></param>
        /// <returns></returns>
        public ResponData Get([FromUri]QueryParams pars)
        {
            //先查询所有,再通过加条件筛选，还可以使用Linq 表达式树实现(后面使用）
            //注意：这也相当是一个业务，一般要吧写在数据访问层或业务层。
            List<sp_order> orderlist = sp_OrderServcie.GetAll();
            //////条件筛选开始,这些代码写在访问层也一样,只要返回一个查询后的集合即可////////////////
            /////这种查询叫多条件组合查询
            if (!string.IsNullOrEmpty(pars.query))
            {
                //单号模糊查询
                orderlist = orderlist.Where(p=>   p.order_number.Contains( pars.query)  ).ToList();
            }
            if (!string.IsNullOrEmpty(pars.is_send))
            {
                //是否发货
                orderlist = orderlist.Where(p => p.is_send.Contains(pars.is_send)).ToList();
            }
            if (!string.IsNullOrEmpty(pars.order_fapiao_title))
            {
                //开票类型
                orderlist = orderlist.Where(p => p.order_fapiao_title.Contains(pars.order_fapiao_title)).ToList();
            }
            if (!string.IsNullOrEmpty(pars.order_fapiao_company))
            {
                //开票公司
                orderlist = orderlist.Where(p => p.order_fapiao_company.Contains(pars.order_fapiao_company)).ToList();
            }
            if (!string.IsNullOrEmpty(pars.order_fapiao_content))
            {
                //发票内空
                orderlist = orderlist.Where(p => p.order_fapiao_content.Contains(pars.order_fapiao_content)).ToList();
            }
            if (!string.IsNullOrEmpty(pars.consignee_addr))
            {
                //发货地址
                orderlist = orderlist.Where(p => p.consignee_addr.Contains(pars.consignee_addr)).ToList();
            }
            //用户id这些是整形的，不能判断"",一般可以设置一个-1或0 则不限,有值就要查询,与前台约定一下值
            if (pars.user_id.HasValue && pars.user_id != -1)
            {
                orderlist = orderlist.Where( p => p.user_id==pars.user_id  ).ToList();
            }
            if (pars.pay_status.HasValue && pars.pay_status != -1) //-1为不限
            {
                orderlist = orderlist.Where(p => p.pay_status == pars.pay_status).ToList();
            }
            //计算总条数
            int total=orderlist.Count;
            //分页查一页的数据
            int n = (pars.pagenum - 1) * pars.pagesize; //排除数据条数
            var showlist = 
                orderlist.OrderByDescending(p => p.order_id).Skip(n).Take( pars.pagesize ).ToList();
            //////////////////////////////////////////////////////////////////////////////
            ResponData rd = new ResponData();
            rd.data = new
            {
                total=total,
                pagenum=pars.pagenum,
                goods=showlist
            };
            rd.meta.msg = "获取成功";
            rd.meta.status = 200;
            return rd;
        }
        #endregion
    }

    //定义一个接收多个参数的查询类 ,基本内容可以为空，可以用可空类型?
    public class QueryParams
    {
        /// <summary>
        /// 订单编号查询关键值
        /// </summary>
        public string query { get; set; }
        /// <summary>
        /// 当前页码
        /// </summary>
        public int pagenum { get; set; }
        /// <summary>
        /// 每页显示条数
        /// </summary>
        public int pagesize { get; set; }
        /// <summary>
        /// 购物用户id
        /// </summary>
        public int? user_id { get; set; }
        /// <summary>
        /// 是否发货
        /// </summary>
        public string is_send { get; set; }
        /// <summary>
        /// 支付状态 双向绑定
        /// </summary>
        public int? pay_status { get; set; }
        /// <summary>
        /// 开票类型
        /// </summary>
        public string order_fapiao_title{ get;set; }
        /// <summary>
        /// 公司名称
        /// </summary>
        public string order_fapiao_company { get; set; }
        /// <summary>
        ///    发票内容
        /// </summary>

        public string order_fapiao_content { get; set; }
        /// <summary>
        ///  发货地址
        /// </summary>

        public string consignee_addr { get; set; }

    }
}
